﻿#include <stdio.h>
//#define name stuff   //基本语法
//#define MAX 1000
//#define MAX 1000;
//#define reg register //为 register这个关键字，创建⼀个简短的名字 
//#define do_forever for(;;) //⽤更形象的符号来替换⼀种实现 
//#define CASE break;case //在写case语句的时候⾃动把 break写上。 
// 如果定义的 stuff过⻓，可以分成⼏⾏写，除了最后⼀⾏外，每⾏的后⾯都加⼀个反斜杠(续⾏符)。
	//#define DEBUG_PRINT printf("file:%s\tline:%d\t \
		date:%s\ttime:%s\n" ,\
		__FILE__,__LINE__ , \
		__DATE__,__TIME__ ) 
// 
//#define name( parament-list ) stuff  //定义宏
//#define 机制包括了⼀个规定，允许把参数替换到⽂本中，这种实现通常称为宏或定义宏

//#define SQUARE( x ) x * x
//#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
//#define PRINT(n) printf("the value of "#n " is %d""\n", n);
	//#运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带参数的宏的替换列表中
	//#运算符所执⾏的操作可以理解为 ”字符串化“

//#undef NAME
//如果现存的⼀个名字需要被重新定义，那么它的旧名字⾸先要被移除。 



//#define GENERIC_MAX(type)     \
//type type##_max(type x, type y)\
//{                              \
//	return (x > y ? x : y);     \
//}




//GENERIC_MAX(int);//int int_max(int x, int y);
//GENERIC_MAX(float);
//
//int main()
//{
//	int a = 5;
//	int ret = SQUARE(a);//实际上在预处理时会替换成 ret = a * a
//	int x = 5;
//	int y = 8;
//	int z = MAX(x++, y++);//z = ( (x++) > (y++) ? (x++) : (y++));
//
//	
//	printf("%d\n", ret);
//	printf("x=%d y=%d z=%d\n", x, y, z);//x=6 y=10 z=9
//
//	PRINT(a);//the value of a is 5
//
//	int m = int_max(3, 4);
//	printf("%d\n", m);
//
//}

//条件编译
// 
//1.
//#if 常量表达式      #endif    常量表达式由预处理器求值 
//如：
//#define __DEBUG__ 1
//#if __DEBUG__
//   .......
//#endif

//2.多个分⽀的条件编译
//#if 常量表达式
////...
//#elif 常量表达式
////...
//#else
////...
//#endif
 
//3.判断是否被定义
//#if defined(symbol)
//#ifdef symbol
//#if !defined(symbol)
//#ifndef symbol

//4.嵌套指令
//#if defined(OS_UNIX)
	//#ifdef OPTION1
		//unix_version_option1();
	//#endif
		//#ifdef OPTION2
			//unix_version_option2();
		//#endif
	//#elif defined(OS_MSDOS)
		//#ifdef OPTION2
			//msdos_version_option2();
		//#endif
//#endif


//#define __DEBUG__
//int main()
//{
//    int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//#ifdef __DEBUG__
//		printf("%d\n", arr[i]);//为了观察数组是否赋值成功。  
//#endif //__DEBUG__
//	}
//	return 0;
//}



